<?php

namespace app\common\model;

use think\Model;

/**
 * 邮箱验证码
 */
class wxhaibao Extends Model
{

     //生成小程序二维码
    public function wxCodeImg($act_id,$appid)
    {
            $user    = $this->auth->getUser();
            $url = 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.getnewAccess_token($appid);
            $qrcode = array(
                'scene'         => $act_id,//二维码所带参数
                'width'         => 200,
                'page'          => 'pages/index/active/active',//二维码跳转路径（要已发布小程序）
                'auto_color'    => true
            );
           
            $codeinfo = sendCmd($url,json_encode($qrcode));//请求微信接口
            
            //判断是否是 json格式
            if(is_null(json_decode($codeinfo))){
                //不是json数据   有数据流  json_decode($codeinfo)返回值为 null
                $filename = ROOT_PATH.'public/uploads/wxcode/'.md5(mt_rand(0,99999)).'.jpg';
                
                $jpg = $codeinfo;//得到post过来的二进制原始数据
                $file = fopen($filename,"w");//创建件准备写入，文件名xcxcode/wxcode1.jpg为自定义
                fwrite($file,$jpg);//写入
                fclose($file);//关闭
                return $filename;
                
            }else{
                //是json数据
                $codeinfo_array=json_decode($codeinfo,true);
                return false;
               
            }

            // $wxcode = $this->wxCodeImg($act_id,$appid);
            // $params = [

            //     'erweima'=>$wxcode,
            //     'avatar'=>$act_data['avatar'],
            //     'title'=>$act_data['title'],
            //     'strtotime'=>'开始时间：'.date('Y-m-d H:i:s',$act_data['starttime']),
            //     'overtime'=>'结束时间：'.date('Y-m-d H:i:s',$act_data['overtime']),
            //     'location'=>'地点：'.$act_data['location'],
            //     'peoplep'=>$act_data['people'],
            //     'show_nickname'=>$act_data['show_nickname'],
            //     'background'=>$background,
            // ];
            // $data_img = model('Wxhaibao')->createMiniWechat($params,$filename);

    }


	public  function createMiniWechat($params,$filename)
    {

    	$fontPath = ROOT_PATH .'public/assets/fonts/fzltxh.ttf';
        $config = array(
            'image' => array(
                array(
                    // 'url' => ROOT_PATH.'public/uploads/image/20200929/erweima.jpg',     //二维码地址
                    'url' => $params['erweima'],     //二维码地址
                    'is_yuan' => true,          //true图片圆形处理
                    'stream' => 0,
                    'left' => 560,               //小于0为小平居中
                    'top' => 800,
                    'right' => 0,
                    'width' => 150,             //图像宽
                    'height' => 150,            //图像高
                    'opacity' => 100            //透明度
                ),
                array(
                    'url' => $params['avatar'], //头像
                    'is_yuan' => false,          //true图片圆形处理
                    'stream' => 0,
                    'left' => 30,               //小于0为小平居中
                    'top' => 800,
                    'right' => 0,
                    'width' => 100,             //图像宽
                    'height' => 100,            //图像高
                    'opacity' => 100            //透明度
                ),
            ),
            'text' => array(
                array(
                    'text' =>$params['title'],            //文字内容
                    'left' => 30,                              //小于0为小平居中
                    'top' => 100,
                    'fontSize' => 25,                         //字号
                    'fontColor' => '0,0,0',                //字体颜色
                    'angle' => 0,
                    'fontPath' => $fontPath,     //字体文件
                ),
                
                array(
                    'text' => $params['strtotime'],            //文字内容
                    'left' => 30,                              //小于0为小平居中
                    'top' => 250,
                    'fontSize' => 20,                         //字号
                    'fontColor' => '0,0,0',                //字体颜色
                    'angle' => 0,
                    'fontPath' => $fontPath,     //字体文件
                ),
                array(
                    'text' => $params['overtime'],            //文字内容
                    'left' => 30,                              //小于0为小平居中
                    'top' => 300,
                    'fontSize' => 20,                         //字号
                    'fontColor' => '0,0,0',                //字体颜色
                    'angle' => 0,
                    'fontPath' => $fontPath,     //字体文件
                ),
                
                array(
                    'text' => $params['location'],            //文字内容
                    'left' => 30,                              //小于0为小平居中
                    'top' => 350,
                    'fontSize' => 20,                         //字号
                    'fontColor' => '0,0,0',                //字体颜色
                    'angle' => 0,
                    'fontPath' => $fontPath,     //字体文件
                ),
                array(
                    'text' => '体验人数：'.$params['peoplep'].'人',            //文字内容
                    'left' => 30,                              //小于0为小平居中
                    'top' => 400,
                    'fontSize' => 20,                         //字号
                    'fontColor' => '0,0,0',                //字体颜色
                    'angle' => 0,
                    'fontPath' => $fontPath,     //字体文件
                ),
                array(
                    'text' => $params['show_nickname'],            //文字内容
                    'left' => 150,                              //小于0为小平居中
                    'top' => 830,
                    'fontSize' => 16,                         //字号
                    'fontColor' => '0,0,0',                //字体颜色
                    'angle' => 0,
                    'fontPath' => $fontPath,     //字体文件
                ),
                array(
                    'text' => '长按识别小程序码',            //文字内容
                    'left' => 550,                              //小于0为小平居中
                    'top' => 980,
                    'fontSize' => 14,                         //字号
                    'fontColor' => '0,0,0',                //字体颜色
                    'angle' => 0,
                    'fontPath' => $fontPath,     //字体文件
                ),
            ),
            // 'background' => ROOT_PATH . 'public/uploads/image/20200929/beijin.jpg',          //背景图
            'background' => $params['background'],          //背景图
        );

        
        $rest = $this->createPoster1($config, $filename);
        
        if ($rest) {
            return $rest;
            
        }
        return false;
    }
    
    /**
 * 生成宣传海报
 * @param array  参数,包括图片和文字
 * @param string $filename 生成海报文件名,不传此参数则不生成文件,直接输出图片
 * @return [type] [description]
 */
public function createPoster1($config = array(), $filename = "")
{
    //如果要看报什么错，可以先注释调这个header
    //if(empty($filename)) header("content-type: image/png");
    if (empty($filename)) header("content-type: image/png");
    $imageDefault = array(
        'left' => 0,
        'top' => 0,
        'right' => 0,
        'bottom' => 0,
        'width' => 100,
        'height' => 100,
        'opacity' => 100
    );
    $textDefault = array(
        'text' => '',
        'left' => 0,
        'top' => 0,
        'fontSize' => 32, //字号
        'fontColor' => '255,255,255', //字体颜色
        'angle' => 0,
    );
    $background = $config['background']; //海报最底层得背景
    //背景方法
    $backgroundInfo = getimagesize($background);
    $backgroundFun = 'imagecreatefrom' . image_type_to_extension($backgroundInfo[2], false);
    $background = $backgroundFun($background);
    $backgroundWidth = imagesx($background); //背景宽度
    $backgroundHeight = imagesy($background); //背景高度
    $imageRes = imageCreatetruecolor($backgroundWidth, $backgroundHeight);
    $color = imagecolorallocate($imageRes, 0, 0, 0);
    imagefill($imageRes, 0, 0, $color);
    imagecopyresampled($imageRes, $background, 0, 0, 0, 0, imagesx($background), imagesy($background), imagesx($background), imagesy($background));
    //处理了图片
    if (!empty($config['image'])) {
        foreach ($config['image'] as $key => $val) {

            $val = array_merge($imageDefault, $val);
            $info = getimagesize($val['url']);
            $function = 'imagecreatefrom' . image_type_to_extension($info[2], false);
            if ($val['stream']) { //如果传的是字符串图像流
                $info = getimagesizefromstring($val['url']);
                $function = 'imagecreatefromstring';
            }
            $res = $function($val['url']);
            $resWidth = $info[0];
            $resHeight = $info[1];
            

            //建立画板 ，缩放图片至指定尺寸
            $canvas = imagecreatetruecolor($val['width'], $val['height']);
           
            imagesavealpha($canvas, true);
            imagefill($canvas, 0, 0, $color);


            //如果是透明的gif或png做透明处理
            $ext = pathinfo($val['url']);
            if (array_key_exists('extension', $ext)) {
                if ($ext['extension'] == 'gif' || $ext['extension'] == 'png') {
                    imageColorTransparent($canvas, $color); //颜色透明

                }
            }
            //关键函数，参数（目标资源，源，目标资源的开始坐标x,y, 源资源的开始坐标x,y,目标资源的宽高w,h,源资源的宽高w,h）
            imagecopyresampled($canvas, $res, 0, 0, 0, 0, $val['width'], $val['height'], $resWidth, $resHeight);
            //$val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']) - $val['width']:$val['left'];
            //如果left小于-1我这做成了计算让其水平居中
            if ($val['left'] < 0) {
                $val['left'] = ceil($backgroundWidth - $val['width']) / 2;
            }
            $val['top'] = $val['top'] < 0 ? $backgroundHeight - abs($val['top']) - $val['height'] : $val['top'];
            //放置图像
            imagecopymerge($imageRes, $canvas, $val['left'], $val['top'], $val['right'], $val['bottom'], $val['width'], $val['height'], $val['opacity']); //左，上，右，下，宽度，高度，透明度

        }
    }
    //处理文字
    if (!empty($config['text'])) {
        foreach ($config['text'] as $key => $val) {
            $val = array_merge($textDefault, $val);
            list($R, $G, $B) = explode(',', $val['fontColor']);
            $fontColor = imagecolorallocate($imageRes, $R, $G, $B);
            //$val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']):$val['left'];
            //如果left小于-1我这做成了计算让其水平居中
            $text = $this->autowrap($val['fontSize'], 0, $val['fontPath'], $val['text'], 610);
            if ($val['left'] < 0) {
                $fontBox = imagettfbbox($val['fontSize'], 0, $val['fontPath'], $text); //文字水平居中实质
                $val['left'] = ceil(($backgroundWidth - $fontBox[2]) / 2); //计算文字的水平位置

            }
            $val['top'] = $val['top'] < 0 ? $backgroundHeight - abs($val['top']) : $val['top'];
            imagettftext($imageRes, $val['fontSize'], $val['angle'], $val['left'], $val['top'], $fontColor, $val['fontPath'], $text);
        }
    }
    //生成图片
    if (!empty($filename)) {
        $res = imagejpeg($imageRes, $filename, 90); //保存到本地
        imagedestroy($imageRes);
        if (!$res) return false;
        return $filename;
    } else {
        header("Content-type:image/png");
        imagejpeg($imageRes); //在浏览器上显示
        imagedestroy($imageRes);
    }
}

public function autowrap($fontsize, $angle, $fontface, $string, $width)
{
// 这几个变量分别是 字体大小, 角度, 字体名称, 字符串, 预设宽度
    $content = "";

    // 将字符串拆分成一个个单字 保存到数组 letter 中
    for ($i = 0; $i < mb_strlen($string); $i++) {
        $letter[] = mb_substr($string, $i, 1);
    }

    foreach ($letter as $l) {
        $teststr = $content . " " . $l;
        $testbox = imagettfbbox($fontsize, $angle, $fontface, $teststr);
        // 判断拼接后的字符串是否超过预设的宽度
        if (($testbox[2] > $width) && ($content !== "")) {
            $content .= "\n";
        }
        $content .= $l;
    }
    return $content;
}

}

